#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const ll mod = 1e9 + 7;
const int N = 2e5 + 10;

int main()
{
  ios::sync_with_stdio(0), cin.tie(0);
  int n, m, q, tmp;
  cin >> n >> m >> q;
  int t[N]{};
  // 前缀和快速判别某时间段有没有中断事件
  for (int i = 1; i <= q; i++)
  {
    cin >> tmp;
    t[tmp] += 1;
  }
  for (int i = 1; i <= n; i++)
    t[i] += t[i - 1];

  int k, s;
  int val[21]{};
  // 记录各个消耗对应的最大收益计划(同一计划可重复获得收益)
  for (int i = 1; i <= m; i++)
  {
    cin >> k >> s;
    val[k] = max(val[k], s);
  }
  ll dp[N]{}; // 记录到第i天的最大收益
  for (int i = 1; i <= n; i++)
  {
    dp[i] = dp[i - 1];
    // 外层填充遍历天数情况
    for (int j = 0; j <= 20; j++)
    {
      int start = i - (1 << j);
      if (start >= 0 && t[i] - t[start] == 0)
        dp[i] = max(dp[i], dp[start] + val[j]);
      else // 园艺师
        break;
    }
  }
  cout << dp[n];
  return 0;
}
